# 因为计算机只能处理数字，如果要处理文本，就必须先把文本转换为数字才能处理。
# 将文本转换为0和1的数字的过程：编码 encoding
# 将0和1的数字转换为文本的过程：解码 decoding


# 由于计算机是美国人发明的，因此，最早只有127个字符被编码到计算机里，
# 也就是大小写英文字母、数字和一些符号，这个编码表被称为ASCII编码，比如大写字母A的编码是65，小写字母z的编码是122。
#
# 但是要处理中文显然一个字节是不够的，至少需要两个字节，而且还不能和ASCII编码冲突，
# 所以，中国制定了GB2312编码，用来把中文编进去。
# 在最新的Python 3 版本中，字符串是以Unicode编码的
# 对于单个字符的编码，Python提供了ord()函数获取字符的整数表示，chr()函数把编码转换为对应的字符：
def ord_nd_chr():
    print(ord('A'))
    print(ord('中'))
    print(chr(66))
    print(chr(25991))


# 由于Python的字符串类型是str，在内存中以Unicode表示，一个字符对应若干个字节。
# 如果要在网络上传输，或者保存到磁盘上，就需要把str变为以字节为单位的bytes。
#
# Python对bytes类型的数据用带b前缀的单引号或双引号表示：
def encode_nd_decode():
    x = b'ABC'
    y = 'ABC'
    # 要注意区分'ABC'和b'ABC'，前者是str，后者虽然内容显示得和前者一样，但bytes的每个字符都只占用一个字节。
    print(x)
    print(y.encode('ascii'))
    z = '中文'
    print(z.encode('utf8'))

def spyder():
    """
    爬取某个网页内容，并且以为内容是字节流，如果需要打印，则需要将字节流解码decode
    :return:
    """
    import requests
    liaoxuefeng = requests.get('https://liaoxuefeng.com/books/python/basic/string-encoding/index.html')
    print(liaoxuefeng.content.decode('utf8'))


if __name__ == '__main__':
    spyder()